
/**
 * @ Authors:
 * 
 * @Veronique De Laet
 * @Johan Willems
 * @Pierre Delaere
 * 
 * @version 2011
 */
package controller;

import java.util.ArrayList;

import java.util.Iterator;

//import model.AangebodenCursus;
import model.AangebodenCursusRule;
import model.Cursus;
import model.CursusDagRule;
import model.EindTijdRule;
//import model.Lector;
import model.IPlanningRule;
import model.LectorBeschikbaarheid;
import model.LectorUren;
import model.LokaalRule;
//import model.container.AangebodenCursussen;
import model.container.Cursussen;
//import model.container.Eigenschappen;
//import model.container.Lectoren;
//import utils.LesDag;
//import utils.Lokalen;
//import utils.TijdsMoment1Dag;

//import java.sql.Connection;
//import java.sql.Statement;
//import java.sql.DriverManager;
//import java.sql.ResultSet;
//import java.sql.ResultSetMetaData;
//import java.sql.SQLException;

import persistency.DatabaseToegang;
public class PlanningController  

{
	String databaseCommand;
	
	IPlanningRule planningRule;
	DatabaseToegang db = new DatabaseToegang();
	
	private void toon(String string)
	{
		System.out.println(string);
	}
	
	public ArrayList<String> cursussenLijst()	
	{
		/*		voor file persistency
		ArrayList<String> lijst = new ArrayList<String>();
		Iterator<?> iterator = Cursussen.cursusLijst.values().iterator();
		Cursus deCursus;
		while (iterator.hasNext()) 
		{
			deCursus = (Cursus)iterator.next();
			lijst.add(deCursus.getCursusNaam());
		}
		return lijst;

*/

		ArrayList<String> lijst = new ArrayList<String>();
		databaseCommand = "SELECT cursusNaam FROM cursus";
		lijst =db.getFromDB(databaseCommand);
		return lijst;
	}
	
	public ArrayList<String> lokalenLijst()
	{
		ArrayList<String> lijst = new ArrayList<String>();
		/* voor file persistency
		ArrayList<String> lijst = new ArrayList<String>();
		for (Lokalen lokaal : Lokalen.values())
		{
			lijst.add(lokaal.toString());
		}*/
		databaseCommand = "SELECT lokaal FROM lokaal";
		lijst = db.getFromDB(databaseCommand);
		return lijst;

	}

	public ArrayList<String> dagenLijst()
	{
		ArrayList<String> lijst = new ArrayList<String>();
/*		for (LesDag dag : LesDag.values())
		{
			lijst.add(dag.toString());
		}*/
		databaseCommand = "Select Lesdag FROM Lesdag";
		lijst = db.getFromDB(databaseCommand);
		return lijst;
	}
	
	public String[] urenLijst(String dag)
	{
		if (dag == "ZATERDAG")
		{
			String[] lijst = {"08.00","08.30","09.00","09.30","10.00","10.30"};
			return lijst;
		}

		else
		{
			String[] lijst = {"17.00","17.30","18.00","18.30","19.00","19.30","20.00"};	
			return lijst;
		}	
	}
	
	public String aangebodenCursussenVoorCursus(String cursus)
	{
		ArrayList<String> lijst = new ArrayList<String>();
		String resultaat = "";
		/* 
		int cursusNummer;
		String lectorNaam = "";
		Iterator<?> iterator = Cursussen.cursusLijst.values().iterator();
		Cursus deCursus;
		while (iterator.hasNext()) 
		{
			deCursus = (Cursus)iterator.next();
			if (cursus == deCursus.getCursusNaam())
			{
				cursusNummer = deCursus.getCursusCode();
				String aangebodenCursusLijn;
				Iterator<?> aangebodenCursussenIterator = AangebodenCursussen.aangebodenCursusLijst.values().iterator();
				AangebodenCursus deAangebodenCursus;
				while (aangebodenCursussenIterator.hasNext())
				{
					deAangebodenCursus = (AangebodenCursus)aangebodenCursussenIterator.next();
					if (deAangebodenCursus.getCursusCode() == cursusNummer)
					{
						Iterator<Lector> li = Lectoren.lectorenLijst.values().iterator();
						while (li.hasNext()){
							Lector lector = li.next();
							if (deAangebodenCursus.getLectorCode().equals(lector.getLectorCode())){
								lectorNaam = lector.getLectorNaam();
							}
						}
						
						
						
						
						aangebodenCursusLijn = String.format("%s\tom %02d:%02d duur: %s uur, max %s studenten in %s door %s\n", deAangebodenCursus.getTijdsMoment().getDag().toString(), 
																								deAangebodenCursus.getTijdsMoment().getStartUur(),
																								deAangebodenCursus.getTijdsMoment().getStartMinuten(),
																								deAangebodenCursus.getTijdsMoment().getDuurTijd(),
																								deAangebodenCursus.getAantalPlaatsen(),
																				               deAangebodenCursus.getLokaal().toString(),
																				               lectorNaam);
					resultaat = resultaat + aangebodenCursusLijn;
					}
				}
			}
		}
		*/
		databaseCommand = "SELECT  l.lesdag";
		databaseCommand += ",t.uur ";
		databaseCommand += ",t.Minuut ";
		databaseCommand += ",t.Duur ";
		databaseCommand += ",a.aantalPlaatsen ";
		databaseCommand += ",k.Lokaal ";
		databaseCommand += ",a.LectorCode ";
		databaseCommand += "FROM aangebodencursus as a ";
		databaseCommand += ",tijdsmoment as t ";
		databaseCommand += ",lesdag as l ";
		databaseCommand += ",Lokaal as k ";
		databaseCommand += ",cursus as c ";
		databaseCommand += "WHERE a.idTijdsMoment = t.idTijdsMoment ";
		databaseCommand += "AND t.Dag = l.idLesdag ";
		databaseCommand += "AND a.lokaal = k.idLokaal ";
		databaseCommand += "AND a.cursuscode = c.cursuscode ";
		databaseCommand += "AND c.cursusNaam = '" + cursus +"'";
		lijst = db.getFromDB(databaseCommand);
		for(String elementen: lijst)
		{
			String[] element = elementen.split(";");
			String temp = String.format("%s\tom %02d:%02d duur: %s uur, max %s studenten in %s door %s\n"
					, element[0]
					, Integer.parseInt(element[1])
					, Integer.parseInt(element[2])
					, element[3]
					, element[4]
					, element[5]
					, element[6]);
			resultaat += temp;
		}
		return resultaat;		
	}

	public String lectorenVoorCursus(String item) 
	{
		
		//we geven momenteel alle lectoren terug omdat de lectoren geen voorkeur cursus hebben
		String lectorLijn = "";
		/*
		Iterator<?> lectorenIterator = Lectoren.lectorenLijst.values().iterator();
		Lector deLector;
		while (lectorenIterator.hasNext()) 
		{
			deLector = (Lector)lectorenIterator.next();
			lectorLijn = lectorLijn + deLector.getLectorNaam() + "\n";
		}
		*/
		ArrayList<String> lijst = new ArrayList<String>();
		databaseCommand = "SELECT lectornaam FROM lector";
		lijst = db.getFromDB(databaseCommand);
		for (String element : lijst)
			lectorLijn += element + "\n";
		return lectorLijn;
	}

	public String controleerAangebodenCursus(String registratieTekst) {

		String status = "";
		planningRule = new AangebodenCursusRule();
		status = status + planningRule.voldoet(registratieTekst);
		planningRule = new EindTijdRule();
		status = status + planningRule.voldoet(registratieTekst);
		planningRule = new CursusDagRule();
		status = status + planningRule.voldoet(registratieTekst);
		planningRule = new LokaalRule();
		status = status + planningRule.voldoet(registratieTekst);
		planningRule = new LectorBeschikbaarheid();
		status = status + planningRule.voldoet(registratieTekst);
		planningRule = new LectorUren();//TODO
		status = status + planningRule.voldoet(registratieTekst);
				
		return status;
	}


	public void voegCursusToe(String registratieTekst, String plaatsen) {
		String[] deel = registratieTekst.split("   "); 
		String[] cursus = deel[0].split(":");// de cursusnaam is het derde deel van het eerste blok
		String[] lector = deel[1].split(":");//de lector in het tweede deel van het tweede blok
		String[] lokaal = deel[2].split(":");//het lokaal is het tweede deel van het derde blok
		String[] dag = deel[3].split(":");//de dag is in het tweede deel van het vierde blok
		String[] uur = deel[4].split(":");//het uur is in het tweede deel van het vijfde blok
		String[] duur = deel[5].split(":");//de duur is in het tweede deel van het zesde blok
/*		int cursusCode = getCursusCode(cursus[2]);
		TijdsMoment1Dag moment = new TijdsMoment1Dag();
		moment.setDag(LesDag.valueOf(dag[1]));
		moment.setStartUur(Integer.parseInt(uur[1].substring(0, 2)));
		moment.setStartMinuten(Integer.parseInt(uur[1].substring(3, 5)));
		moment.setDuurTijd(Integer.parseInt(duur[1]));//
		String lectorCode = "";
		Iterator<Lector> lectorI = Lectoren.lectorenLijst.values().iterator();
		while (lectorI.hasNext()){
			Lector deLector = lectorI.next();
			if (lector[1].equals(deLector.getLectorNaam())){
				lectorCode = deLector.getLectorCode();
			}
		}
		
		AangebodenCursus aCursus = new AangebodenCursus(cursusCode, Lokalen.valueOf(lokaal[1]), Integer.parseInt(plaatsen), moment, lectorCode);
		System.out.println(aCursus.toString().hashCode());
		AangebodenCursussen.aangebodenCursusLijst.put(aCursus.toString().hashCode(), aCursus);*/
		ArrayList<String> temp = new ArrayList<String>();
		//get lesdagid from DB for given day
		String lesdagId= "";
		databaseCommand = "select idLesDag from lesdag where lesdag = '" + dag[1] +"'";
		temp = db.getFromDB(databaseCommand);
		for (String item : temp)
			lesdagId = item;
		
		//get startuur
		String startUur = uur[1].substring(0, 2);
				
		//get startminuten
		String startMinuten = uur[1].substring(3, 5);
		
		//get duur
		String lesDuur = duur[1];
		
		//save tijdsmoment
		databaseCommand = "INSERT INTO tijdsmoment (Dag, Uur, Minuut, Duur) VALUES (" + lesdagId + ", " + startUur + ", " + startMinuten + "," + lesDuur +")";
		db.setInDB(databaseCommand); //we kijken voorlopig niet of de insert is gelukt
		//en vraag de nieuwe index op
		databaseCommand = "select max(idTijdsMoment) from tijdsmoment";
		String tijdID = "";
		temp = db.getFromDB(databaseCommand);
		for (String item : temp)
			tijdID = item;
				
				
		//get lokaalID
		databaseCommand = "select idLokaal from lokaal where lokaal = '" + lokaal[1] + "'";
		String lokaalID = "";
		temp = db.getFromDB(databaseCommand);
		for (String item : temp)
			lokaalID = item;
				
		//get lectorCode
		databaseCommand = "select lectorCode from lector where lectornaam = '" + lector[1] + "'";
		String lectorCode = "";
		temp = db.getFromDB(databaseCommand);
		for (String item : temp)
			lectorCode = item;
				
		databaseCommand = "select cursuscode from cursus where cursusnaam = '"+ cursus[2] + "'";
		String cursusCode = "";
		temp = db.getFromDB(databaseCommand);
		for (String item : temp)
			cursusCode = item;
		
				
		//Voeg aangeboden cursus toe
		databaseCommand = "INSERT INTO aangebodencursus (cursuscode, aantalPlaatsen, lokaal, idTijdsMoment, LectorCode) VALUES ('" + cursusCode + "'," + plaatsen + "," + lokaalID + "," + tijdID + ",'" + lectorCode + "')";
		db.setInDB(databaseCommand);
				
	}
	
	private int getCursusCode (String cursus)
	{
		int code = 0;
		Iterator<Cursus> i = Cursussen.cursusLijst.values().iterator();
		while (i.hasNext()){
			Cursus c = i.next();
			if(cursus.equals(c.getCursusNaam())){
				code = c.getCursusCode();
			}
		}
		return code;
		
	}

	public ArrayList<String> lectorenLijst() {
		ArrayList<String> lijst = new ArrayList<String>();
		databaseCommand = "SELECT lectornaam FROM lector";
		lijst = db.getFromDB(databaseCommand);
		return lijst;
	}
}
